package net.skystudio.es.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;
import java.util.Date;

/**
 * 操作日志
 * 业务系统标识
 * | 景区门票   | scenic    |
 * | -------- | --------- |
 * | 电商      | ec        |
 * | 悠游卡    | easyCard  |
 * | 轮渡     | ferry     |
 * | 租车     | carRental |
 * | 礼品卡   | giftCard  |
 * | 年卡     | yearCard  |
 * | 酒店     | hotal     |
 */
@Data
@Document(indexName = "index_system_log")
public class OperateLog implements Serializable {

    /**
     * 主键
     */
    @Id
    private String id;

    /**
     * 系统名称
     */
    @Field(type = FieldType.Keyword)
    private String systemName;

    /**
     * 请求来源IP
     */
    @Field(type = FieldType.Keyword)
    private String remoteAddress;

    /**
     * 业务方法描述（eg:获取订单列表）
     */
    @Field(type = FieldType.Text)
    private String businessDesc;

    /**
     * 操作类型(eg:上架、下架...)
     */
    @Field(type = FieldType.Keyword)
    private String actionType;

    /**
     * 用户id
     */
    @Field(type = FieldType.Keyword)
    private String userId;

    /**
     * 用户名
     */
    @Field(type = FieldType.Keyword)
    private String userName;

    /**
     * 操作时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd HH:mm:ss", timezone ="GMT+8")
    @Field(type = FieldType.Date, format = DateFormat.custom ,pattern ="yyyy-MM-dd HH:mm:ss")
    private Date operateTime;

    /**
     * 异常信息
     */
    @Field(type = FieldType.Text)
    private String exceptionMsg;

    /**
     * 备注
     */
    @Field(type = FieldType.Text, analyzer = "ik_smart")
    private String remark;

}
